import { ElMessage } from 'element-plus';

const re = /[^0-9\(\)\[\\u4E00-\\u9FFF]\+\-\×\÷\=\>\≥\<\≤\≠\.\#\{\}]{1,}/; // 判断输入字符合法性的正则(只能输入数字,+-×÷,(),#{})
const ru = /#\{(.+?)\}/g; // 取出#{}中的字符正则
const regex1 = /\((.+?)\)/g; // 匹配出所有括号,返回数组
// formula为传入需要校验的字符串; ruleArr为定义的系统提供的字段数组(#{}包裹的内容)
export const validatedFormula = (formula, ruleArr) => {
    // 剔除空白符
    formula = formula.replace(/\s/g, '');

    // 判断括号相关
    // 括号不配对
    const stack = [];
    for (var q = 0, item; q < formula.length; q++) {
        item = formula.charAt(q);
        if (item === '(') {
            stack.push('(');
        } else if (item === ')') {
            if (stack.length > 0) {
                stack.pop();
            } else {
                return false;
            }
        }
    }
    if (stack.length !== 0) {
        ElMessage.error('括号必须成对出现');
        throw new Error('括号必须成对出现');
    }

    // 错误情况，运算符号不能在首末位
    if (/^[\=\>\≥\<\≤\≠\+\-\×\÷.]|[\+\-\×\÷.]$/.test(formula)) {
        ElMessage.error('错误情况，运算符号不能在首末位');
        throw new Error('运算公式配置不正确');
    }

    // 错误情况，运算符连续
    if (/[\=\>\≥\<\≤\≠\+\-\*\/]{2,}/.test(formula)) {
        ElMessage.error('错误情况，运算符连续');
        throw new Error('运算公式配置不正确');
    }

    return true;
};
